博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django+xadmin打造在线教育平台(五)
阅读量:4711 次
发布时间:2019-06-10

本文共 9940 字,大约阅读时间需要 33 分钟。

 

代码

八、课程详情页功能的实现

8.1.课程列表

 (1)配置urls

MxOnline/urls中

path("course/", include('course.urls', namespace="course")),

course里面新建urls.py

# course/urls.pyfrom django.urls import path,re_pathfrom .views import CourseListView# 要写上app的名字app_name = "course"urlpatterns = [    path('list/',CourseListView.as_view(),name='course_list'),]

把course-list.html拷贝到templates目录下

from django.shortcuts import renderfrom django.views.generic import Viewclass CourseListView(View):    def get(self, request):        return render(request, "course-list.html")

 

(2)course-list.html继承base.html

修改title,修改bread里面,content里面放course-list独有的

 
course-list.html

然后去后台添加十门课程

(3)列表展示

views.py

# course/views.pyfrom django.shortcuts import renderfrom django.views.generic import Viewfrom .models import Courseclass CourseListView(View):    def get(self, request):        all_courses = Course.objects.all()        return render(request, "course-list.html",{'all_courses':all_courses})

course-list.html

{% for course in all_course %}

{
{ course.name }}

时长:{
{ course.learn_times }}
学习人数:{
{ course.students }}  
来自{
{ course.course_org.name }}
{
{ course.fav_nums }}
{% endfor %}

8.2.分页

try:            page = request.GET.get('page', 1)        except PageNotAnInteger:            page = 1        p = Paginator(all_courses,2 , request=request)        courses = p.page(page)
    {% if all_courses.has_previous %}
  • 上一页
  • {% endif %} {% for page in all_courses.pages %} {% if page %} {% ifequal page all_courses.number %}
  • {
    { page }}
  • {% else %}
  • {
    { page }}
  • {% endifequal %} {% else %}
  • ...
  • {% endif %} {% endfor %} {% if all_courses.has_next %}
  • 下一页
  • {% endif %}

8.3.排序

class CourseListView(View):    def get(self, request):        all_courses = Course.objects.all().order_by('-add_time')        # 热门课程推荐        hot_courses = Course.objects.all().order_by('-click_nums')[:3]        # 排序        sort = request.GET.get('sort', "")        if sort:            if sort == "students":                all_courses = all_courses.order_by("-students")            elif sort == "hot":                all_courses = all_courses.order_by("-click_nums")        # 分页        try:            page = request.GET.get('page', 1)        except PageNotAnInteger:            page = 1        p = Paginator(all_courses,2 , request=request)        courses = p.page(page)        return render(request, "course-list.html", {            "all_courses":courses,            'sort': sort,            'hot_courses':hot_courses,        })
热门课程推荐
{% for hot_course in hot_courses %}

{
{ hot_course.name }}

难度:{
{ hot_course.get_degree_display }}
{% endfor %}
 
course-list.html
 
views.py

 

8.4.课程详情

course-detail.html复制进来

 

 (1)url配置

re_path('course/(?P
\d+)/', CourseDetailView.as_view(), name="course_detail"),
class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        return  render(request, "course-detail.html", {        })

 

 在course-list.html中添加链接到详情

 

 (2)views

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        return  render(request, "course-detail.html", {            'course':course,        })

(3)Course model增加

  • 一个category字段
  • 一个获取章节数的方法
  • 一个获取这么课程的学习用户方法

 

 
Course

(4)course-detail.html中课程详情信息显示

{
{ course.name }}

{
{ course.desc }}
难度:{
{ course.get_degree_display }}
学习人数:{
{ course.students }}
  • 时     长:{
    { course.learn_times }}
  • 章 节 数:{
    { course.get_zj_nums }}
  • 课程类别:{
    { course.category }}
  • 学习用户: {% for user_course in course.get_learn_users %} {% endfor %}

 

 显示课程详情

 

 

8.5.授课机构 

 (1)CourseOrg model添加一个获取教师数的方法

def get_teacher_nums(self):        #获取机构的教师数        return self.teacher_set.all().count()
 
CourseOrg

(2)授课机构显示

授课机构

世界名校,课程权威

{
{ course.course_org.name }}

已收藏
  • 课  程  数:      {
    { course.course_org.course_nums }}
  • 教  师  数:      {
    { course.course_org.get_teacher_nums }}
  • 所在地区:  {
    { course.course_org.address }}
  • 认       证 :   

 

 

8.6.相关课程推荐

(1)给“Course” model添加一个“课程标签”字段

tag = models.CharField('课程标签',default='',max_length=10)
 
Course

 (2)views

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        # 课程标签        # 通过当前标签,查找数据库中的课程        tag = course.tag        if tag:            # 需要从1开始不然会推荐自己            relate_courses = Course.objects.filter(tag=tag)[:3]        else:            relate_courses = []        return  render(request, "course-detail.html", {            'course':course,            'relate_courses':relate_courses,        })

(3)前端

相关课程推荐
{% for relate_course in relate_courses %}

{ { relate_course.name }}

学习时长:{ { relate_course.learn_times }}
{% endfor %}

 

 

 

8.7.课程收藏和机构收藏

  {% block custom_js %}{% endblock %},放到最下面的位置,因为是js代码,要最后加载

后端判断当前收藏转态

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        # 课程标签        # 通过当前标签,查找数据库中的课程        has_fav_course = False        has_fav_org = False        # 必须是用户已登录我们才需要判断。        if request.user.is_authenticated:            if UserFavorite.objects.filter(user=request.user, fav_id=course.id, fav_type=1):                has_fav_course = True            if UserFavorite.objects.filter(user=request.user, fav_id=course.course_org.id, fav_type=2):                has_fav_org = True        tag = course.tag        if tag:            # 需要从1开始不然会推荐自己            relate_courses = Course.objects.filter(tag=tag)[:2]        else:            relate_courses = []        return  render(request, "course-detail.html", {            'course':course,            'relate_courses':relate_courses,            "has_fav_course": has_fav_course,            "has_fav_org": has_fav_org,        })

course-detail.html中添加Ajax

{% block custom_js %}    {% endblock %}

转载于:https://www.cnblogs.com/syq666/p/8715569.html

你可能感兴趣的文章
json/xml processing model与xml和json的简要区别
查看>>
session学习
查看>>
新手福利:真机调试无需开发者证书
查看>>
exp8 web基础
查看>>
01-π、自然常识e、导数、导数的单调性
查看>>
(windows版)Mysql cluster 7.2集群单机多实例
查看>>
LogUtils.java
查看>>
如何在Oracle中建表空间、建用户并导入dmp文件详解
查看>>
一些未注意到的命名规范
查看>>
通过Html5 Canvas画柱状图
查看>>
青蛙跳台阶(Fibonacci数列)
查看>>
洛谷P3834 [模板]可持久化线段树1(主席树) [主席树]
查看>>
Codeforces Round #316 (Div. 2)C. Replacement(模拟)
查看>>
Python入门学习笔记17(sqlalchemyd的使用)
查看>>
.NET CORE TOKEN 权限验证
查看>>
.Net Core 中间件之主机地址过滤(HostFiltering)源码解析
查看>>
cordova百度地图定位Android版插件
查看>>
WPF最大化避免覆盖任务栏
查看>>
解决引用 System.Windows.Interactivity程序集生成多国语言文件夹fr、es、ja等问题
查看>>
UWP入门(十一)--使用选取器打开文件和文件夹
查看>>